const readline = require('readline-sync');

// 单行注释
/**
 * 
 * 多
 * 行
 * 注
 * 释
 * 
 *  */

// let login_id='zeki';
// console.log(login_id);


//函数 、方法名一般是动词

//蛇形命名法 login_id
//驼峰命名法 loginId   LoginId

//----- 变量
//js是一门弱类型或动态语言  'zeki'  18
// let a=19;
// console.log(a);
// a='zeki';
// console.log(a);


// var b=10;
// let c=15;
// const d=20;

//let 声明普通变量，const一般用于声明不改变值的变量
//变量声明了不赋值就是undefined
//变量第一次声明并赋值的过程就是变量初始化；
//let 不能重复声明变量
//let 有块级作用域
//变量声明前不能使用
// let e=100;
// e=20;
// console.log(e);

// let sum1=0,sum2=0;
// console.log(num);
// let num=100;
// {
//     let a=1;
//     console.log(a);
//     console.log(num);
// }
// console.log(num);
// console.log(a);

//var存在变量提升,只提升变量不提升值
// var n;
// console.log(n);
// n=200;
// console.log(n);

// {
//     var text='zhangsan';
// }
// console.log(text);
// console.log(a);
// let a=1;

//===== 数据类型
//查看数据类型
// let num = 10, str = 'zhangsan';
// console.log(typeof num);
// console.log(typeof str);
//---- 1.数字型 number
// 1.整数
let a = 12;
let d = 12;
console.log(a == d);
// 2.浮点数
let b = 0.2;
let c = b * b;
console.log(c);
// 3.最大值最小值
console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
// 4.无穷大 Infinity
console.log(Number.MAX_VALUE * 2);
// 5.非数 NaN  not a number
//非数不与任何值相等，包括它自己
//涉及到NaN的计算只会得到NaN
let s1 = 'zhangsan' - 10;
let s2 = NaN;
console.log(s1 == s2);
console.log(typeof s2);

//isNaN() 判断是否是数字，是数字返回false，不是数字返回true
console.log(isNaN(10));//false
console.log(isNaN('abc' - 10));//true
console.log(isNaN('10'));//false

let e = '12345';
let f = isNaN(e);
console.log(f);

// ---- 2.字符串型 string   单引号''  双引号""  ``ES6新增字符串模版
//注意引号的嵌套问题，可以使用不同的引号来进行区分
let str = '他说："你真帅！"';
console.log(str);
//转义符
let str2 = '他说：\'你真帅！\''
console.log(str2);
//\n 换行符 newline
let str3 = '吴洋喜欢吃红烧肉，\n张飞扬喜欢吃冒菜';
console.log(str3);

//查看字符串长度 length
let str4 = '吴洋喜欢吃红烧肉,\n张飞扬喜欢吃冒菜';
console.log(str4.length);

//字符串拼接 + 字符串和任意值拼接都会被转化成字符串
let str5 = '999', str6 = '感冒灵';
console.log(str5 + str6);
console.log(999 + str6);
console.log('12' + '12');//1212
console.log('12' + 12);//1212 
console.log(12 + 12);//24
console.log(true + '12');

//练习：定义两个变量装自己的姓名和年龄，拼成一句话
let name = '查丁予', age = 18;
console.log('我叫' + name + ',我今年' + age + '岁');
console.log(str5, str6);

//es6新增的字符串模版
//支持多行文本
//进行变量解析
let str7 = `0糖
0卡
0脂肪`;
console.log(str7);
console.log(`我叫${name},我今年${age + 2}岁`);

// 练习：提示用户输入姓名和年龄，拼成一句话输出
// console.log('请输入你的姓名');
// let name1 = readline.question();
// console.log('请输入你的年龄');
// let age1 = readline.question();
// console.log(`我叫${name1},我今年${age1 * 2}岁`);

//---- 布尔型 true(真)和false(假)
let flag1 = true, flag2 = false;
console.log(typeof flag1, typeof flag2);
console.log(flag1+1);//在加法中，true被当作1
console.log(flag2+1);//在加法中，false被当作0

// 未定义 undefined
let u=undefined;
console.log(u,typeof u);
console.log(u+'aaa');//undefinedaaa
console.log(u+1);//NaN 数字与undefined相加会得到NaN

//空值 null
let space=null;
console.log(typeof space);

let a1='10',a2=10;
console.log(a1==a2);//只比较值，不比较数据类型
console.log(a1===a2);//值和数据类型都一样才返回true

console.log(undefined==null);//true
console.log(undefined===null);//false
//undefined表示缺少值
//null通常用于释放内存，计算时被看作0
console.log(null+'aaa');//nullaaa
console.log(null+1);//1